
Public Class frmPedido

    Dim MiGestDatos As New GestDatos
    Dim blnIVA As Boolean
    Dim blnRE As Boolean
    Dim Series(,) As String
    Dim dsMostrar As Data.DataSet
    Dim NPedido As Integer
    Dim PrimeraVez As Boolean = True
    Dim Linea As Integer = 0
    Dim MiCursorRaton As New GestProyecto
    Friend MiLineasPedido As New LineasPedido
    Dim RegEliminar(0, 1) As String
    Dim ContRegEliminar As Integer = 0
    Dim _NPedido As Integer
    
    Private Sub frmPedido_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load


        MiCursorRaton.CursorRaton(True)

        Dim RutaConexion As String
        RutaConexion = "Data Source =" & System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) & "\DBGestion.sdf;"

        Dim LineaSQL(3) As String
        Dim Tablas(3) As String

        LineaSQL(0) = "Select * from SERIES"
        Tablas(0) = "SERIES"

        LineaSQL(1) = "Select CodCliente,Cliente,IVA,RE from Clientes"
        Tablas(1) = "Clientes"

        LineaSQL(2) = "Select * from Pedidos"
        Tablas(2) = "Pedidos"

        LineaSQL(3) = "Select * from LineaPedido"
        Tablas(3) = "LineaPedido"

        MiGestDatos.ConextarBD(RutaConexion, LineaSQL, Tablas)

        If frmInicio.Nuevo = False Then
            Dim Cliente As String
            Dim MiNPedido As Integer
            Cliente = frmInicio.MifrmDClientes.NCliente
            MiNPedido = frmInicio.MifrmDClientes.NPedido
            MostrarSerie()
            cboSeriePed.Text = frmInicio.MifrmDClientes.NSerie
            txtFPedido.Text = frmInicio.MifrmDClientes.FechaPed

            ModPedido(Cliente, MiNPedido)
        Else
            Calendario.Visible = False
            MostrarSerie()
            txtFPedido.Text = Date.Now.Date
            txtCodCli.Focus()
        End If

        MiCursorRaton.CursorRaton(False)

    End Sub

    Private Sub btnBFechaP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBFechaP.Click

        MiCursorRaton.CursorRaton(True)

        Calendario.Visible = True

        MiCursorRaton.CursorRaton(False)

    End Sub

    Private Sub Calendario_DateChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DateRangeEventArgs) Handles Calendario.DateChanged

        MiCursorRaton.CursorRaton(True)

        txtFPedido.Text = e.Start.Date

        Calendario.Visible = False

        MiCursorRaton.CursorRaton(False)

    End Sub

    Private Sub btnBCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBCliente.Click

        MiCursorRaton.CursorRaton(True)

        Dim MifrmClientes As New frmClientes
        MifrmClientes.lblFormulario.Text = "Pedidos"
        MifrmClientes.Show()

        MiCursorRaton.CursorRaton(False)

    End Sub

    Private Sub ComprobarCliente()

        Dim MiDataView As Data.DataView
        Dim Filtro As String = "CodCliente = '" & txtCodCli.Text & "'"
        Dim DataTable As Data.DataTable = MiGestDatos.DataSet.Tables("Clientes")
        midataview = DataTable.DefaultView

        MiDataView.RowFilter = Filtro
        
        If MiDataView.Count > 0 Then
            If lblCliente.Text = "" Then
                lblCliente.Text = MiGestDatos.DataSet.Tables("Clientes").Rows(0)("Cliente")
            End If

            btnNuevo.Enabled = True
            btnBCliente.Enabled = False
            cboSeriePed.Enabled = False
            Calendario.Visible = False
            btnBFechaP.Enabled = False
            cmdAceptar.Enabled = False
            txtCodCli.Enabled = False
            TabLinea.Focus()
            btnNuevo.Focus()

            If Series(cboSeriePed.SelectedIndex, 1) = "True" Then
                blnIVA = False
                blnRE = False
                Exit Sub
            End If

            If Not Series(cboSeriePed.SelectedIndex, 2) = "" Then
                NPedido = Series(cboSeriePed.SelectedIndex, 2)
                'MsgBox(NPedido)
            End If
            If MiGestDatos.DataSet.Tables("Clientes").Rows(0)("IVA") = True Then
                blnIVA = True
                If MiGestDatos.DataSet.Tables("Clientes").Rows(0)("RE") = True Then
                    blnRE = True
                Else
                    blnRE = False
                End If
            Else
                blnIVA = False
                blnRE = False
            End If
            TabPedidos.SelectedIndex = 1
        Else
            MsgBox("No existe el Cliente")
            lblCliente.Text = ""
        End If

    End Sub


    Private Sub MostrarSerie()

        With MiGestDatos.DataSet.Tables("SERIES")

            If Not .Rows.Count = 0 Then
                Dim Serie As String
                Dim Exento As Boolean
                Dim NPedido As Integer

                ReDim Series((.Rows.Count - 1), 2)
                For i As Integer = 0 To .Rows.Count - 1
                    Serie = .Rows(i)("Serie")
                    If IsDBNull(.Rows(i)("Exento")) = False Then
                        Exento = .Rows(i)("Exento")
                    Else
                        Exento = False
                    End If
                    NPedido = .Rows(i)("NPedido")
                    Series(i, 0) = Serie
                    Series(i, 1) = Exento
                    Series(i, 2) = NPedido
                    cboSeriePed.Items.Add(Serie)
                Next
                cboSeriePed.SelectedIndex = 0
            End If
        End With
    End Sub

    Private Sub mnuCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCancelar.Click
        Me.Dispose()
    End Sub

    Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click

        MiCursorRaton.CursorRaton(True)

        frmInicio.MifrmLineaPed = New frmLineaPed
        frmInicio.MifrmLineaPed.Nuevo = True
        frmInicio.MifrmLineaPed.Show()

        MiCursorRaton.CursorRaton(False)

    End Sub

    Private Sub cmdAceptar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdAceptar.Click

        MiCursorRaton.CursorRaton(True)

        If Not txtCodCli.Text = "" Then
            ComprobarCliente()
        Else
            MsgBox("Introduzca un Cliente")
        End If

        MiCursorRaton.CursorRaton(False)

    End Sub

    Friend ReadOnly Property IVA() As Boolean
        Get
            Return blnIVA
        End Get
    End Property

    Friend ReadOnly Property RE() As Boolean
        Get
            Return blnRE
        End Get
    End Property
    Friend Sub ModPedido(ByVal Clientes As String, ByVal NPedido As Integer)

        _NPedido = NPedido
        btnBCliente.Enabled = False
        cmdAceptar.Enabled = False
        txtCodCli.Text = Clientes
        txtCodCli.Enabled = False
        Calendario.Visible = False
        cboSeriePed.Enabled = False
        btnBFechaP.Enabled = False
        btnNuevo.Enabled = True
        Dim Filtro As String = "NPedido = " & _NPedido & " AND Serie ='" & cboSeriePed.Text & "'"
        Dim DataTable As Data.DataTable = MiGestDatos.DataSet.Tables("LineaPedido")
        Dim MiDataView As New Data.DataView
        MiDataView = DataTable.DefaultView

        MiDataView.RowFilter = Filtro
        Try
            For i As Integer = 0 To MiDataView.ToTable.Rows.Count - 1

                With MiDataView.ToTable
                    MiLineasPedido.add(New LineaPedido(.Rows(i)("Codigo"), .Rows(i)("Articulo"), CInt(.Rows(i)("Cantidad")), CDec(.Rows(i)("Precio")) _
                    , .Rows(i)("Dtos"), .Rows(i)("IVA"), .Rows(i)("RE"), CDec(.Rows(i)("Cuota")), CDec(.Rows(i)("Total")), False))
                End With
            Next

            Call Mostrar()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

    Friend Sub Mostrar()

        If MiLineasPedido.Count = 0 Then
            Linea = 0
            btnEditar.Enabled = False
            btnBorrar.Enabled = False
        Else
            btnEditar.Enabled = True
            btnBorrar.Enabled = True
        End If



        Dim dtMostrar As New Data.DataTable("LineaPed")
        dsMostrar = New Data.DataSet

        'Agregamos las columnas
        dtMostrar.Columns.Add("Articulo")
        dtMostrar.Columns.Add("Cantidad")
        dtMostrar.Columns.Add("Total")

        'Le asigno las columnas ya agregadas al dataset
        dsMostrar.Tables.Add(dtMostrar)
        Dim drMostrar As Data.DataRow = dtMostrar.NewRow

        For i As Integer = 0 To MiLineasPedido.Count - 1
            drMostrar = dtMostrar.NewRow
            drMostrar("Articulo") = MiLineasPedido.Item(i).Item(1)
            drMostrar("Cantidad") = MiLineasPedido.Item(i).Item(2)
            drMostrar("Total") = MiLineasPedido.Item(i).Item(8)
            dtMostrar.Rows.Add(drMostrar)
        Next

        grdLineaPed.DataSource = dsMostrar.Tables("LineaPed")
        If PrimeraVez = True Then
            Call Encabezados()
            PrimeraVez = False
        End If
        dtMostrar.Dispose()
        TotalPedido()

    End Sub
    Private Sub Encabezados()
        Try
            Dim Emcabezado(2, 2) As String
            Emcabezado(0, 0) = "Articulo"
            Emcabezado(0, 1) = "ARTICULO"
            Emcabezado(0, 2) = "140"
            Emcabezado(1, 0) = "Cantidad"
            Emcabezado(1, 1) = "CANT."
            Emcabezado(1, 2) = "40"
            Emcabezado(2, 0) = "Total"
            Emcabezado(2, 1) = "PREC."
            Emcabezado(2, 2) = "40"

            Dim Estilos As New DataGridTableStyle
            Estilos.MappingName = dsMostrar.Tables("LineaPed").TableName

            For i As Integer = 0 To 2
                Dim Estilo As New DataGridTextBoxColumn
                With Estilo
                    .MappingName = Emcabezado(i, 0)
                    .HeaderText = Emcabezado(i, 1)
                    .Width = Emcabezado(i, 2)
                    Estilos.GridColumnStyles.Add(Estilo)
                End With

            Next
            grdLineaPed.TableStyles.Add(Estilos)
            grdLineaPed.Select(0)
        Catch ex As Exception

            MsgBox(ex.Message)
        End Try
    End Sub

    Private Sub mnuAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuAceptar.Click

        MiCursorRaton.CursorRaton(True)

        If MiLineasPedido.Count = 0 Then
            MsgBox("Introduzca una linea de pedido")
            Exit Sub
        Else
            Guardar()
        End If

        MiCursorRaton.CursorRaton(False)

    End Sub

    Private Sub TotalPedido()
        Dim Total As Decimal = 0
        Dim Cuota As Decimal = 0
        Dim TotalPedido As Decimal = 0

        If MiLineasPedido.Count = 0 Then Exit Sub
        For i As Integer = 0 To MiLineasPedido.Count - 1
            Total += MiLineasPedido.Item(i).Item(8)
            Cuota += MiLineasPedido.Item(i).Item(7)
        Next

        TotalPedido = Total + Cuota

        txtTotal.Text = Total
        If Not Cuota = 0 Then
            txtBI.Text = Cuota
        Else
            txtBI.Text = 0
        End If
        txtCuota.Text = Cuota
        txtTotalPedido.Text = Total + Cuota

    End Sub

    Private Sub Guardar()


        Try
            'Insertamos el objeto DataRow para insertar en el los nuevos datos
            Dim MiDataRow As Data.DataRow

            With MiGestDatos

                'Creamos una nueva fila en el DataSet
                MiDataRow = .DataSet.Tables("Pedidos").NewRow

                'Insertamos los datos en el DataSet
                MiDataRow("Pedidos") = NPedido + 1
                MiDataRow("Importe") = txtTotalPedido.Text
                MiDataRow("Agente") = frmInicio.lblAgente.Text
                MiDataRow("Servido") = 0
                MiDataRow("NCliente") = txtCodCli.Text
                MiDataRow("NSerie") = cboSeriePed.Text
                MiDataRow("FechaPed") = (txtFPedido.Text)


                '.DataSet.Tables("Pedidos").AcceptChanges()
                '.DataSet.Tables("Pedidos").BeginInit()
                .DataSet.Tables("Pedidos").Rows.Add(MiDataRow)
                Dim LineaSQL As String
                LineaSQL = "INSERT INTO Pedidos(Pedidos,Importe,Agente,Servido,NCliente,NSerie,FechaPed)" & _
                " VALUES(@Pedidos,@Importe,@Agente,@Servido,@NCliente,@NSerie,@FechaPed)"

                .GuardarDatos(LineaSQL, "Pedidos", True)

                .SQLCommand.Parameters.Add("@Pedidos", Data.SqlDbType.Int, 4, "Pedidos")
                .SQLCommand.Parameters.Add("@Importe", Data.SqlDbType.Money, 8, "Importe")
                .SQLCommand.Parameters.Add("@Agente", Data.SqlDbType.NVarChar, 8, "Agente")
                .SQLCommand.Parameters.Add("@Servido", Data.SqlDbType.Bit, 2, "Servido")
                .SQLCommand.Parameters.Add("@NCliente", Data.SqlDbType.NVarChar, 8, "NCliente")
                .SQLCommand.Parameters.Add("@NSerie", Data.SqlDbType.NVarChar, 8, "NSerie")
                .SQLCommand.Parameters.Add("@FechaPed", Data.SqlDbType.DateTime, 8, "FechaPed")

                .ActualizarBD("Pedidos")

                For i As Integer = 0 To MiLineasPedido.Count - 1
                    MiDataRow = .DataSet.Tables("LineaPedido").NewRow
                    MiDataRow("Codigo") = MiLineasPedido.Item(i).Item(0)
                    MiDataRow("Articulo") = MiLineasPedido.Item(i).Item(1)
                    MiDataRow("Cantidad") = MiLineasPedido.Item(i).Item(2)
                    MiDataRow("Precio") = MiLineasPedido.Item(i).Item(3)
                    MiDataRow("Dtos") = MiLineasPedido.Item(i).Item(4)
                    MiDataRow("IVA") = MiLineasPedido.Item(i).Item(5)
                    MiDataRow("RE") = MiLineasPedido.Item(i).Item(6)
                    MiDataRow("Cuota") = MiLineasPedido.Item(i).Item(7)
                    MiDataRow("Total") = MiLineasPedido.Item(i).Item(8)
                    MiDataRow("NPedido") = NPedido + 1
                    MiDataRow("Serie") = cboSeriePed.Text

                    .DataSet.Tables("LineaPedido").Rows.Add(MiDataRow)

                    LineaSQL = "INSERT INTO LineaPedido(Codigo,Articulo,Cantidad,Precio,Dtos,IVA,RE,Cuota,Total," & _
                    "NPedido,Serie) VALUES(@Codigo,@Articulo,@Cantidad,@Precio,@Dtos,@IVA,@RE,@Cuota,@Total," & _
                    "@NPedido,@Serie)"

                    .GuardarDatos(LineaSQL, "LineaPedido", True)

                    .SQLCommand.Parameters.Add("@Codigo", Data.SqlDbType.NVarChar, 15, "Codigo")
                    .SQLCommand.Parameters.Add("@Articulo", Data.SqlDbType.NVarChar, 100, "Articulo")
                    .SQLCommand.Parameters.Add("@Cantidad", Data.SqlDbType.Int, 4, "Cantidad")
                    .SQLCommand.Parameters.Add("@Precio", Data.SqlDbType.Money, 8, "Precio")
                    .SQLCommand.Parameters.Add("@Dtos", Data.SqlDbType.Real, 4, "Dtos")
                    .SQLCommand.Parameters.Add("@IVA", Data.SqlDbType.Real, 4, "IVA")
                    .SQLCommand.Parameters.Add("@RE", Data.SqlDbType.Real, 4, "RE")
                    .SQLCommand.Parameters.Add("@Cuota", Data.SqlDbType.Money, 8, "Cuota")
                    .SQLCommand.Parameters.Add("@Total", Data.SqlDbType.Money, 8, "Total")
                    .SQLCommand.Parameters.Add("@NPedido", Data.SqlDbType.NVarChar, 8, "NPedido")
                    .SQLCommand.Parameters.Add("@Serie", Data.SqlDbType.NVarChar, 6, "Serie")
                    .ActualizarBD("LineaPedido")
                Next


                'MsgBox(.DataSet.Tables("SERIES").Rows(cboSeriePed.SelectedIndex)(0))
                '.DataSet.Tables("SERIES").Rows(cboSeriePed.SelectedIndex)("Serie") = Series(cboSeriePed.SelectedIndex, 0) 'Series(cboSeriePed.SelectedIndex, 1)
                '.DataSet.Tables("SERIES").Rows(cboSeriePed.SelectedIndex)("Exento") = 0 'Series(cboSeriePed.SelectedIndex, 1)
                '.DataSet.Tables("SERIES").Rows(cboSeriePed.SelectedIndex)("NPedido") = NPedido + 1

                MiDataRow = .DataSet.Tables("SERIES").Rows(cboSeriePed.SelectedIndex)
                'MiDataRow("Serie") = cboSeriePed.Text
                'MsgBox(MiDataRow("Exento"))
                'MiDataRow("Exento") = False
                MiDataRow("NPedido") = NPedido + 1
                LineaSQL = "UPDATE SERIES SET NPedido=@NPedido WHERE Serie='" & cboSeriePed.Text & "'"
                .GuardarDatos(LineaSQL, "SERIES", False)
                '.SQLCommand.Parameters.Add("@Serie", Data.SqlDbType.NVarChar, 6, "Serie")
                '.SQLCommand.Parameters.Add("@Exento", Data.SqlDbType.Bit, 1, "Exento")
                .SQLCommand.Parameters.Add("@NPedido", Data.SqlDbType.Int, 4, "NPedido")


                .ActualizarBD("SERIES")

            End With

            MsgBox("Pedido creado")
            Me.Dispose()

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

    Private Sub Modificar()

        Try
            'Insertamos el objeto DataRow para insertar en el los nuevos datos
            Dim MiConsulta As String
            Dim PosicionDS As Integer
            MiConsulta = "Pedidos=" & NPedido & " and NSerie ='" & cboSeriePed.Text
            PosicionDS = MiGestDatos.Posicion("Pedidos", MiConsulta)


            MsgBox(MiGestDatos.DataSet.Tables("Pedidos").Rows(PosicionDS)(0))
            MsgBox(MiGestDatos.DataSet.Tables("Pedidos").Rows(PosicionDS)(1))
            Exit Sub

            With MiGestDatos
                
                'Insertamos los datos en el DataSet
                .DataSet.Tables("Pedidos").Rows(0)(0) = NPedido + 1
                .DataSet.Tables("Pedidos").Rows(0)(1) = txtTotalPedido.Text
                .DataSet.Tables("Pedidos").Rows(0)(2) = frmInicio.lblAgente.Text
                .DataSet.Tables("Pedidos").Rows(0)(3) = 0
                .DataSet.Tables("Pedidos").Rows(0)(4) = txtCodCli.Text
                .DataSet.Tables("Pedidos").Rows(0)(5) = cboSeriePed.Text
                .DataSet.Tables("Pedidos").Rows(0)(6) = (txtFPedido.Text)


                'Dim LineaSQL As String
                'LineaSQL = "UPDATE Pedidos SET Pedidos=@Pedidos,Importe,Agente,Servido,NCliente,NSerie,FechaPed"


                '.GuardarDatos(LineaSQL, "Pedidos", True)

                .SQLCommand.Parameters.Add("@Pedidos", Data.SqlDbType.Int, 4, "Pedidos")
                .SQLCommand.Parameters.Add("@Importe", Data.SqlDbType.Money, 8, "Importe")
                .SQLCommand.Parameters.Add("@Agente", Data.SqlDbType.NVarChar, 8, "Agente")
                .SQLCommand.Parameters.Add("@Servido", Data.SqlDbType.Bit, 2, "Servido")
                .SQLCommand.Parameters.Add("@NCliente", Data.SqlDbType.NVarChar, 8, "NCliente")
                .SQLCommand.Parameters.Add("@NSerie", Data.SqlDbType.NVarChar, 8, "NSerie")
                .SQLCommand.Parameters.Add("@FechaPed", Data.SqlDbType.DateTime, 8, "FechaPed")

                .ActualizarBD("Pedidos")

            End With

        Catch ex As Exception

        End Try

    End Sub
    
    Private Sub btnEditar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEditar.Click

        MiCursorRaton.CursorRaton(True)

        frmInicio.MifrmLineaPed = New frmLineaPed
        With frmInicio.MifrmLineaPed
            .Nuevo = False
            .NLinea = Linea
            .txtCodigo.Text = MiLineasPedido.Item(Linea).Item(0)
            .txtArticulo.Text = MiLineasPedido.Item(Linea).Item(1)
            .txtCantidad.Text = MiLineasPedido.Item(Linea).Item(2)
            .txtCuota.Text = MiLineasPedido.Item(Linea).Item(7)
            .txtDto.Text = MiLineasPedido.Item(Linea).Item(4)
            .txtIVA.Text = MiLineasPedido.Item(Linea).Item(5)
            .txtPB.Text = MiLineasPedido.Item(Linea).Item(3)
            .txtRE.Text = MiLineasPedido.Item(Linea).Item(6)
            .txtTotal.Text = MiLineasPedido.Item(Linea).Item(8)
            .Show()
        End With

        MiCursorRaton.CursorRaton(False)
    End Sub

    Private Sub grdLineaPed_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles grdLineaPed.Click

        MiCursorRaton.CursorRaton(True)

        Linea = grdLineaPed.CurrentRowIndex
        grdLineaPed.Select(grdLineaPed.CurrentRowIndex)

        MiCursorRaton.CursorRaton(False)

    End Sub

    Private Sub btnBorrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBorrar.Click

        MiCursorRaton.CursorRaton(True)

        Try
            MiLineasPedido.RemoveAt(Linea)
            Mostrar()

            If MiLineasPedido.Item(Linea).Item(9) = False Then
                ReDim Preserve RegEliminar(ContRegEliminar, 1)
                RegEliminar(ContRegEliminar, 0) = _NPedido
                RegEliminar(ContRegEliminar, 1) = cboSeriePed.Text
                ContRegEliminar += 1
            End If

        Catch ex As Exception
            MsgBox("Marque un registro")
        End Try

        MiCursorRaton.CursorRaton(True)

    End Sub
End Class